package com.pn.service.impl;

import com.pn.dto.StoreCountVo;
import com.pn.entity.Result;
import com.pn.entity.Store;
import com.pn.page.Page;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import com.pn.mapper.StoreMapper;
import com.pn.service.StoreService;

import java.util.List;

@CacheConfig(cacheNames = "com.pn.service.impl.StoreServiceImpl")
@Service
public class StoreServiceImpl implements StoreService{

    @Resource
    private StoreMapper storeMapper;

    @Cacheable(key = "'all:store'")
    @Override
    public List<Store> findAllStore() {
        return storeMapper.selectAllStore();
    }

    @Override
    public Result countInventByStore() {
        List<StoreCountVo> storeCountVos = storeMapper.selectSumByStore();
        return Result.ok(storeCountVos);
    }

    @Override
    public Page findStoreInformation(Store store, Page page) {
        int count = storeMapper.countStore(store);
        page.setTotalNum(count);
        List<Store> stores = storeMapper.selectAllStoreByPage(store, page);
        page.setResultList(stores);
        return page;
    }

    @Override
    public Result findStoreByNum(String storeNum) {
        Store store = storeMapper.selectStoreByNum(storeNum);
        return Result.ok(store == null);
    }

    @Override
    public Result findStoreByName(String storeName) {
        Store store = storeMapper.selectStoreByName(storeName);
        if (store != null){
            return Result.err(Result.CODE_ERR_BUSINESS,"仓库名称已经存在！");
        }
        return Result.ok();
    }

    @Override
    public Result addStore(Store store) {
        int i = storeMapper.insertStore(store);
        if (i > 0){
            return Result.ok("仓库添加成功！");
        }
        return Result.err(Result.CODE_ERR_BUSINESS,"仓库添加失败！");
    }

    @Override
    public Result modifyStore(Store store) {
        storeMapper.updateStoreInformation(store);
        return Result.ok("仓库信息修改成功！");
    }

    @Override
    public Result removeStore(Integer storeId) {
        int i = storeMapper.deleteStore(storeId);
        if (i > 0){
            return Result.ok("仓库删除成功！");
        }
        return Result.err(Result.CODE_ERR_BUSINESS,"仓库删除失败！");
    }
}
